'''
格式:
if 条件1:
    语句1
elif 条件2:
    语句2
elif 条件3:
    语句3
else :
    语句4
'''
def socre(num):
    if num >= 80:
        print(num,"execllent")
    elif num >= 70:
        print(num,"fine")
    elif num>= 60:
        print(num,"pass")
    else:
        print(num,"bad")
socre(90)
socre(80)
socre(70)
socre(60)
socre(59)

#if语句可以用表达式来实现
#如果a<b,那么c=a,否则c=b
a,b = 4,6
c = a if a < b else b
print(c)

#循环语句
"""
while 条件判断:
    执行语句1
else:
    执行语句2
#死循环
while 1:
    执行语句1
"""
#例子
flag = True
while flag:
    input_str = input("please input something,'q' for quit.-> ")
    print("your input is %s" % input_str)
    if input_str == "q":
        flag = False
print("You're out of circulation.")

#例子
#此为终端停止循环
print("break--------------")
count = 0
while count < 5:
    print("aaa", count)
    count += 1
    if count == 2:
        break
    print("bbb", count)

#例子
#此为停止1次循环后语句,进行下一次循环
print("continue--------------")
count = 0
while count < 5:
    print("aaa", count)
    count += 1
    if count == 2:
        continue
    print("bbb", count)

#创建一个迭代器对象(一个对象拥有_iter_方法与_next_方法,这个对象就是一个迭代器)
#创建一个可迭代对象(一个对象拥有_iter_方法,这个对象就是一个可迭代对象)
#可迭代对象如果没有_next_方法,则无法调用next()
class MyList(object):
    def __init__(self,num):
        self.num = num
    def __iter__(self):
        return MyListIterator(self.num)

class MyListIterator(object):
    def __init__(self,data):
        self.data = data
        self.now = 0

    def __iter__(self):
        return self

    def show(self):
        print(self.data)

    def __next__(self):
        while self.now < self.data:
            self.now += 1
            return self.now - 1
        raise StopIteration

# my_list = MyListIterator(7)
# print(my_list.show())
if __name__ == '__main__':
    my_list = MyListIterator(7)  # 得到一个可迭代对象
    print("使用for循环来遍历迭代器")
    for i in my_list:
        print(i)

#print测试
'''
#for循环实际是调用MyListIterator迭代器的_next_方法
 my_list = MyListIterator(5)  # 得到一个可迭代对象
    print("使用for循环来遍历迭代器")
    for i in my_list:
        print(i)
    my_list = MyListIterator(5)  # 重新得到一个可迭代对象
    print("使用next来遍历迭代器")
    print(next(my_list))
    print(next(my_list))
    print(next(my_list))
    print(next(my_list))
    print(next(my_list))
    my_list = MyListIterator(5)  # 重新得到一个可迭代对象
    print("同时使用next和for来遍历迭代器")
    print("先使用两次next")
    print(next(my_list))
    print(next(my_list))
    print("再使用for,会从第三个元素2开始输出")
    for i in my_list:
        print(i)
print(MyList(5))
'''
# mylist = MyList(5)
# for i in mylist:
#     print(i)

#生成器:是一类特殊的迭代器,在需要时产生结果而不是立即产生结果.yield语句一次返回一个结果,在每个结果中间挂起函数状态,以便下次从它离开的地方继续执行.
# return返回后,函数会释放,而生成器不会,在直接调用next方法或者用语句进行下一次迭代时,生成器会从yield下一句开始执行,知道遇到下一个yield.
# 例子
def myList(num):
    now = 0
    while now < num:
        val = (yield now)
        print(val)
        now = now + 1 if val is None else val   #val为None,迭代值增长1,否则从新设置当前迭代值为val
        print(now)
 my_list = myList(5)
# my_list = myList(5)  # 得到一个生成器对象
# print("for 循环遍历生成器myList")
# for i in my_list:
#     print(i)
'''
my_list = myList(5)  # 得到一个生成器对象
print("for 循环遍历生成器myList")
for i in my_list:
    print(i)

my_list = myList(5)  # 得到一个生成器对象
print("next遍历生成器myList")
print(next(my_list))  # 返回当前迭代值值
print(next(my_list))  # 返回当前迭代值值
print(next(my_list))  # 返回当前迭代值值
print(next(my_list))  # 返回当前迭代值值
print(next(my_list))  # 返回当前迭代值值
'''
